/*--------------------------------------------------------------------------------------------------------------------
 *  -------------------------------------------------------------------------------------------------------------------
 *
 *  Filename: lte_module.h
 *
 *  Description: some lte_module_xxx api
 *
 *  History:
 *  Jan 9, 2024- Li Tang Creation of file
 *
 *  Notes:
 *
 ******************************************************************************/
#ifndef _LTE_MODULE_H
#define _LTE_MODULE_H

#include "gbl_types.h"

#define LOCK_UART_BUSY_FLAG          (1 << 0)
#define LOCK_USB_BUSY_FLAG           (1 << 1)
#define LOCK_RESERVED_1_FLAG         (1 << 2)
#define LOCK_RESERVED_2_FLAG         (1 << 3)
#define LOCK_RESERVED_3_FLAG         (1 << 4)
#define LOCK_RESERVED_4_FLAG         (1 << 5)
#define LOCK_DMA_WORK_FLAG           (1 << 6)
#define LOCK_UART_WORK_FLAG          (1 << 7)
#define LOCK_ADC_WORK_FLAG           (1 << 8)
#define LOCK_SPINOR_WORK_FLAG        (1 << 9)
#define LOCK_SPI_WORK_FLAG           (1 << 10)
#define LOCK_TEMPERATURE_WORK_FLAG   (1 << 11)


/*****************************************************************
* Function: lte_module_platform_work_lock
*
* Description:
* 	该函数用于获取当前的work lock，判定哪些任务再组织模块进入低功耗。
* Parameters:
* None
*
* Return:
* 	 work lock mask
*    if (mask & LOCK_UART_BUSY_FLAG){
*       LOG_PRINTF("***** Check Uart...\n");	
*    }
*    if (mask & LOCK_USB_BUSY_FLAG){
*       LOG_PRINTF("***** Check Usb...\n");	
*    }
*    常见可控的影响模组进入低功耗的，主要关注以下两个状态，
*    模块进入低功耗，关注一下三个条件
*    1、允许系统休眠：dev_GetSleep() == 1，可以通过dev_SetSleep(1)设置
*    2、RRC处于idle状态：ps_GetRrcState() == 0, 
*    3、无work_lock: lte_module_platform_work_lock() == 0
*    
*****************************************************************/
UINT32 lte_module_platform_work_lock(void);


typedef enum
{
    PING_START = 0,    
    PING_ERROR,     /* error happen for ping, will break ping process*/
    PING_TIMEOUT,   /* ping result, one ping one event if timeout*/
    PING_SUCCESS,   /* ping result, one ping one event if success*/
    PING_STOP
}ping_evt_e;

/*****************************************************************
* Function: lte_module_lwip_ping
*
* Description:
* 	该函数用于发起ping请求，并获取结果。
* 
* Parameters:
* 	hostname	[in] 	 hostname。
* 	servname	[in] 	 NULL。
* 	ipv4v6  	[in] 	 4：IPV4, 6: IPV6。
* 	print_cb	[in] 	 ping过程的状态回调。参数是状态字符串
* 	event_cb	[in] 	 ping过程的事件回调。参数是ping_evt_e
*
* Return:
* 	0 执行成功
*	-1 执行失败
*
*****************************************************************/
int lte_module_lwip_ping(char *hostname, char *servname, int ipv4v6, void (*print_cb)(char *), void (*event_cb)(int));

#endif

